python 您所在的位置:网站首页 python griddata插值 python

python

#python| 来源: 网络整理| 查看: 265

我在 scipy 中使用 griddata 函数来插入 3 维和 4 维数据。它像冠军一样工作,除了它返回一堆 NaN,因为我需要的一些点超出了输入数据的范围。考虑到 N-d 数据无论如何仅适用于“线性”模式插值,让 griddata 进行外推而不是仅仅返回 NaN 应该是轻而易举的事。有没有人这样做或找到解决方法?澄清一下:我有非结构化数据,所以我不能使用任何需要常规网格的功能。 谢谢! 亚历克斯

最佳答案

用 3、4 或实际上任何维度内插和外推数据的一种可能性是使用 scipy.interpolate.Rbf。

为方便起见,get_data() 函数和plot_3d() 函数附在最后。

示例数据

示例数据如下所示(第四维 w,以颜色显示)。数据间隔不规则且未网格化。

x, y, z, w = get_data(N=200) plot_3d(x, y, z, w) 3d 中的插值和外插

首先,让我们设置新的 x 和 y 坐标。为了使这更有趣,让我们推断负 x 和负 y 方向。这形成了新的 x 和 y 感兴趣范围。

xs = np.linspace(-10, 20) # some extrapolation to negative numbers ys = np.linspace(-10, 20) # some extrapolation to negative numbers xnew, ynew = np.meshgrid(xs, ys) xnew = xnew.flatten() ynew = ynew.flatten()

使用 scipy.interpolate.Rbf 进行插值.现在,

from scipy.interpolate import Rbf rbf3 = Rbf(x, y, z, function="multiquadric", smooth=5) znew = rbf3(xnew, ynew) plot_3d(xnew, ynew, znew) 可以有任意多的变量/维度。第一个参数 (x,y) 被视为节点的坐标。 function 参数之前的最后一个参数是要插入的“值”(现在:z)。 function 参数可用于控制如何对值进行插值。 这会影响结果,因此请将其与您的数据一起使用。。 smooth 参数可用于平滑数据中的一些噪声。如果 smooth 为零,则结果为插值;它将遍历您的所有数据点。如果为正值,则数据更平滑。 这会影响结果,因此请将其与您的数据一起使用。。 以下是结果,推断当然是错误的。这只是为了证明外推是可能的。您可能需要微调 function 和 smooth 以获得所需的结果。通常,不应将数据外推“太多”(如本例所示)

添加第四维度

也可以内插和外推到第四维。方法如下:

rbf4 = Rbf(x, y, z, w, function="thin_plate", smooth=5) wnew = rbf4(xnew, ynew, znew) plot_3d(xnew, ynew, znew, wnew) 我为第四维创建了另一个 Rbf 实例,并使用了通过 rbf3(3d 插值)计算的 znew。 我将 function 更改为 "thin_plate",因为它在视觉上似乎使用此数据集表现得更好。 结果如下: 附录:get_data 和plot_3d

出于测试目的:

import numpy as np def get_data(): np.random.seed(100) N = 200 maxval = 20 x = np.random.random(N) * maxval y = np.random.random(N) * maxval z = x ** 2 + np.sqrt(y) * y - y ** 3 + np.random.random(N) + 18 * y ** 2 * 2 w = x ** 2 - np.log(y + (x * y) ** 2) return x, y, z, w def plot_3d(x, y, z, w=None, show=True): import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import axes3d fig = plt.figure(figsize=(10, 6)) ax = axes3d.Axes3D(fig) ax.scatter3D(x, y, z, c=w if not w is None else "b") plt.show()

关于python - python 中的 3D 外推(基本上,scipy.griddata 扩展为外推),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11214118/



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有